
import java.text.ParseException;
import java.util.Calendar;
import java.util.Scanner;

public class TestTime {
    public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);//创建一个Scanner类的对象scanner - 用于从键盘读取时间
        System.out.print("请输入第1个时间：");
        String str1 = scanner.nextLine();//读入第一个时间
        System.out.print("请输入第2个时间：");
        String str2 = scanner.nextLine();//读入第二个时间

        for (int i = 1; i < 5; i++) {//循环计算相邻两个时间的时间差
            if(i>1){
                System.out.print("请输入第"+(i+1)+"个时间：");
                str1 = str2;//将上一轮比较的两个时间中的第二个时间 - 作为本轮比较中的第一个时间
                str2 = scanner.nextLine();//读入下一个时间 - 作为本轮比较中的第二个时间
            }

            //将从键盘中读入的时间字符串通过split()方法根据正则表达式中的字符进行分割，获得一个时间中的各个关键字段
            //将“年月日时分秒"中的任一字符作为分隔符，将读取到的时间字符串分割为6个子字符串，依次放到字符串数组中。
            String[] d1 = str1.split("[年月日时分秒]");
            String[] d2 = str2.split("[年月日时分秒]");

            //新建一个Calendar类的对象c - 用于获取输入的日历的时间值
            Calendar c = Calendar.getInstance();

            //将第一个时间的年、月、日、时、分、秒对应的字段通过Integer类中的parseInt方法转换为int类型
            //并通过set()方法设置日历c
            c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer.parseInt(d1[2]),
                    Integer.parseInt(d1[3]), Integer.parseInt(d1[4]), Integer.parseInt(d1[5]));
            //通过getTimeInMillis()方法获取第一个时间的时间值 - (以毫秒为单位)
            long l1 = c.getTimeInMillis();

            //同理可获取第二个时间的时间值
            //根据第二个时间设置日历
            c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer.parseInt(d2[2]),
                    Integer.parseInt(d2[3]), Integer.parseInt(d2[4]), Integer.parseInt(d2[5]));
            long l2 = c.getTimeInMillis();//获取对应时间值

            //计算时间差 - 通过Math类的abc()方法对时间差取绝对值 - (以毫秒为单位)
            long timeDifference = Math.abs(l1-l2);

            //将时间差换算成对应的日、时、分、秒数
            long days = timeDifference / (24 * 60 * 60 * 1000);//换算成对应的天数
            long hours = (timeDifference % (24 * 60 * 60 * 1000))/ (60 * 60 * 1000);//换算成对应的小时数
            long minutes = (timeDifference % (60 * 60 * 1000))/ (60 * 1000);//换算成对应的分钟数
            long seconds = timeDifference % (60 * 1000) / 1000;//换算成对应的秒数

            //将时间差以“××日××时××分××秒”格式输出
            System.out.println("第"+i+"个时间与第"+(i+1)+"个时间的时间差为："
                    +days+"日"+""+hours+"时"+minutes+"分"+seconds+"秒");

        }
    }
}

